package cn.dglydrpy.study.j2ee.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.dglydrpy.study.j2ee.jdbc.utils.DBUtil;



public class BmiHttpServlet extends HttpServlet {
	//bmi指数 = 体重（公斤）/身高（米）/身高（米） >25重了 <19轻了 得到form表单的值，写入数据库，将判断结果返回给浏览器
	
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		double weight = Double.parseDouble(request.getParameter("weight"));
		double height = Double.parseDouble(request.getParameter("height"));
		double Bmi = 100*100*weight/(height*height);
		//暂时不做参数合法性检查
		/*
		 * 当有多个请求参数名相同，应该使用getParameterValues()。
		 */
		String[] intersts = request.getParameterValues("interest");
		if(intersts != null){//多选框用户1个都不选会返回null
			for (String interst : intersts) {
				System.out.println(interst);
			}
		}
		/**
		 * 告诉浏览器响应内容是html类型 且  out输出的编码格式采用utf-8而不使用默认得ios8859-1编码
		 */
		response.setContentType("text/html;charset=utf-8");
		/*
		 * 通过response获得输出流。向流中写入数据，这些数据会存放到response对象里面。当service方法执行完毕，
		 * 容器会从response中获取处理结果，然后打包发送给浏览器。
		 */
		
		//将用户数据写入数据库
		/*
		 * 异常处理的流程：
		 * 1.记日志（保留现场）
		 * 2.看异常能否恢复，若不能恢复（eg:数据库服务暂时停止，网络中断等待，这样的异常叫系统异常），需要提示用户稍后重试
		 */
		Connection conn = null;
		PreparedStatement stat = null;
		try {
			conn = DBUtil.getConn();
			String sql = "insert into bmi values(null,?,?,?)";
			stat = conn.prepareStatement(sql);
			stat.setDouble(1, height);
			stat.setDouble(2, weight);
			stat.setDouble(3, Bmi);
			
			stat.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				DBUtil.close(conn,stat,null);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		PrintWriter out = response.getWriter();
		out.println("您的体重" + (Bmi>25?"重了！":(Bmi<19?"轻了！":"正常")));
		out.close();
	}

}
